本教程客户端API关闭HTTPS认证,但传输使用HTTPS。(为了接入日志监控)
主要介绍了ES集群的搭建。ELK单机使用可参考:https://songxwn.com/elk/
Elasticsearch版本:8.x
系统版本:Rocky Linux 8.7 (关闭SE Linux和防火墙)
配置要求:建议4核8G以上,存储空间按照存储的文档大小规划。
Elasticsearch 集群建议至少要有三个节点,两个以上的master节点。
本教程也同样适用于也适用于其他RHEL8-9版本衍生版系统:如Centos stream、AlmaLinux等。
ELK Stack系列文章:https://songxwn.com/categories/linux/ELK/
个人博客:https://songxwn.com/
RSS订阅:https://songxwn.com/atom.xml
(1)集群(Cluster): ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。
(2)节点(Node): 形成集群的每个服务器称为节点。
(3)索引(index): 在 ES 中, 索引是一组文档的集合。
(4)分片(shard)
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。
(5)副本(Replia)
为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。
分片与副本的区别在于:
当你分片设置为5,数据量为30G时,es会自动帮我们把数据均衡地分配到5个分片上,即每个分片大概有6G数据,当你查询数据时,ES会把查询发送给每个相关的分片,并将结果组合在一起。
而副本,就是对分布在5个分片的数据进行复制。因为分片是把数据进行分割而已,数据依然只有一份,这样的目的是保障查询的高效性,副本则是多复制几份分片的数据,这样的目的是保障数据的高可靠性,防止数据丢失。
注意
索引建立后,分片个数是不可以更改的。
cat >> /etc/sysctl.conf <<EOF
vm.max_map_count=655360
fs.file-max=655360
EOF
sysctl -p
# 执行在线生效。
cat >> /etc/security/limits.conf <<EOF
* soft nofile 924000
* hard nofile 924000
* soft nproc 4096
* hard nproc 4096
EOF
# 永久生效,但需要重启。
vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=0
enabled=1
autorefresh=1
type=rpm-md
# 使用官方镜像源,关闭gpg认证。
节点名字 | IP | 角色规划 |
---|---|---|
ES-01 | 100.64.128.101 | master、data |
ES-02 | 100.64.128.102 | master、data |
ES-03 | 100.64.128.103 | master、data |
vim /etc/hosts
100.64.128.101 ES-01
100.64.128.102 ES-02
100.64.128.103 ES-03
# 配置本地主机名解析,通过ping验证。每个节点都要配置
dnf install elasticsearch logstash kibana -y
# 注意安装后会自动生成证书和密码,默认CA根目录证书有效期为三年,transport证书有效期为99年。
注意配置前不要启动ES。
vim /etc/elasticsearch/elasticsearch.yml
# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
enabled: false
# keystore.path: certs/http.p12
xpack.security.http.ssl 改为false,并注释证书路径。
##ES-01配置#################################################
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: ES-CU1
node.name: ES-01
http.host: 100.64.128.101
transport.host: 100.64.128.101
network.host: 100.64.128.101
node.roles: [master,data]
discovery.seed_hosts: ["100.64.128.101:9300","100.64.128.102:9300","100.64.128.103:9300"]
cluster.initial_master_nodes: ["ES-01"]
##ES-02配置#################################################
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: ES-CU1
node.name: ES-02
http.host: 100.64.128.102
transport.host: 100.64.128.102
network.host: 100.64.128.102
node.roles: [master,data]
discovery.seed_hosts: ["100.64.128.101:9300","100.64.128.102:9300","100.64.128.103:9300"]
cluster.initial_master_nodes: ["ES-01"]
##ES-03配置#################################################
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: ES-CU1
node.name: ES-03
http.host: 100.64.128.103
transport.host: 100.64.128.103
network.host: 100.64.128.103
node.roles: [master,data]
discovery.seed_hosts: ["100.64.128.101:9300","100.64.128.102:9300","100.64.128.103:9300"]
cluster.initial_master_nodes: ["ES-01"]
# 注意防火墙开放端口 9200 和 9300端口。
# 注意默认配置文件有http.host 和 cluster.initial_master_nodes配置,注意删除或修改。
systemctl enable elasticsearch.service
# 设置开机启动
systemctl restart elasticsearch.service
# 启动
curl -q http://100.64.128.101:9200
# 验证启动
注意:安装之后其他节点不能启动,要等配置好集群配置和证书后启动。
如果启动过了,建议按照教程最后的教程清理按照。
scp -r ES-01:/etc/elasticsearch/certs/ /etc/elasticsearch/
scp -r ES-01:/etc/elasticsearch/elasticsearch.keystore /etc/elasticsearch/
# scp同步证书文件和密钥文件,也可以手动下载上传。
systemctl enable elasticsearch.service
# 设置开机启动
systemctl restart elasticsearch.service
# 启动
curl -q http://100.64.128.102:9200
# 简单验证启动,如有返回字符则启动生成。
scp -r ES-01:/etc/elasticsearch/certs/ /etc/elasticsearch/
scp -r ES-01:/etc/elasticsearch/elasticsearch.keystore /etc/elasticsearch/
# scp同步覆盖证书文件和密钥文件,也可以手动下载上传。
systemctl enable elasticsearch.service
# 设置开机启动
systemctl restart elasticsearch.service
# 启动
curl -q http://100.64.128.103:9200
# 简单验证启动,如有返回字符则启动生成。
tree -L 2 /etc/elasticsearch/
/etc/elasticsearch/
├── certs
│ ├── http_ca.crt
│ ├── http.p12
│ └── transport.p12
├── elasticsearch.keystore
├── elasticsearch-plugins.example.yml
├── elasticsearch.yml
├── jvm.options
├── jvm.options.d
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles
# certs为默认生成的证书存储目录,http_ca.crt为根证书、http.p12为默认9200所使用的web服务器证书,transport.p12为传输节点之间使用的证书。
# elasticsearch.keystore 为存储密码所使用的文件,如证书密码,LDAP访问密码、邮箱密码等。
# elasticsearch.yml 为主配置文件。
# jvm.options 为ES的JAVA启动配置文件,可以修改启动内存等配置。
tree -L 1 /usr/share/elasticsearch
/usr/share/elasticsearch
├── bin
├── jdk
├── lib
├── LICENSE.txt
├── modules
├── NOTICE.txt
├── plugins
└── README.asciidoc
# bin存放二进制启动文件的目录
# jdk存放自带JAVA版本的目录
tree -L 1 /var/log/elasticsearch/
/var/log/elasticsearch/
├── elasticsearch_audit.json
├── elasticsearch_deprecation.json
├── elasticsearch_index_indexing_slowlog.json
├── elasticsearch_index_search_slowlog.json
├── elasticsearch.log
├── elasticsearch_server.json
├── ES-CU1_audit.json
├── ES-CU1_deprecation.json
├── ES-CU1_index_indexing_slowlog.json
├── ES-CU1_index_search_slowlog.json
├── ES-CU1.log
├── ES-CU1_server.json
├── gc.log
├── gc.log.00
# 可用于排错
tree -L 1 /var/lib/elasticsearch/
/var/lib/elasticsearch/
├── indices
├── node.lock
├── nodes
├── snapshot_cache
└── _state
# 存放数据
usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
# 重置最高管理员elastic密码,全节点同步
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system
# 重置 kibana_system密码,全节点同步,下面接入kibana使用。
curl -k -u elastic http://100.64.128.101:9200
Enter host password for user 'elastic':
{
"name" : "ES-01",
"cluster_name" : "ES-CU1",
"cluster_uuid" : "UNCqtG1YTeuHSNgDHOHkIw",
"version" : {
"number" : "8.7.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "09520b59b6bc1057340b55750186466ea715e30e",
"build_date" : "2023-03-27T16:31:09.816451435Z",
"build_snapshot" : false,
"lucene_version" : "9.5.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
# 使用上面重置的密码,查看ES是否可用。
curl -k -u elastic http://100.64.128.101:9200/_cat/nodes?v
Enter host password for user 'elastic':
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
100.64.128.102 5 92 1 0.01 0.03 0.00 dm - ES-02
100.64.128.101 18 93 5 0.20 0.35 0.17 dm * ES-01
100.64.128.103 17 89 1 0.02 0.05 0.02 dm - ES-03
# 使用上面重置的密码,可以查看所有在线的集群。
Kibana 数据基本都存储在ES数据库,且为data角色的。
默认为 5601 端口,默认绑定为127.0.0.1 地址。使用HTTP协议。
可以修改kibana.yml 文件修改绑定地址,或者使用Nginx反向代理。
vim /etc/kibana/kibana.yml
i18n.locale: "zh-CN"
server.host: "0.0.0.0"
# 配置语言和监听IP。
systemctl enable --now kibana.service
# 配置开机启动和启动。
vim /etc/kibana/kibana.yml
# =================== System: Elasticsearch ===================
elasticsearch.hosts: ["http://100.64.128.101:9200","http://100.64.128.102:9200","http://100.64.128.103:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "EVecudsC4vvlcR6QT4mR"
修改文件,配置ES所有访问地址,配置系统默认账号kibana_system的密码,填入配置文件。(必须为此账号)
使用systemctl restart kibana.service
重启服务,使配置生效。
vim /etc/kibana/kibana.yml
monitoring.ui.ccs.enabled: false
# 添加配置文件,重启生效。
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u beats_system
# 重置自带的beats_system的密码,在下面使用。
dnf install metricbeat -y
systemctl enable --now metricbeat.service
metricbeat modules enable elasticsearch-xpack
# 安装metricbeat并启用监控ES模块。
vim /etc/metricbeat/metricbeat.yml
output.elasticsearch:
hosts: ["http://100.64.128.101:9200","http://100.64.128.102:9200","http://100.64.128.103:9200"]
username: "beats_system"
password: "1@PASSWORD"
# 配置集群地址,账号密码,接入ES。
systemctl restart metricbeat.service
访问 http://100.64.128.101:5601/app/monitoring
路径
即可查看监控,使用elastic账号登录。
systemctl stop elasticsearch
# 停止服务
dnf remove elasticsearch -y
# 使用dnf包管理器删除
rm -rf /var/lib/elasticsearch
# 清理默认数据存储文件
rm -rf /etc/elasticsearch
# 清理配置文件及默认证书和密钥存储
rm -rf /usr/share/elasticsearch
# 清理程序所在目录
rm -rf /var/log/elasticsearch
# 清理日志存储
https://qiita.com/mingchun_zhao/items/b229addd5697ad571d94
https://www.zsjweblog.com/2022/03/09/elasticsearch8-1-0%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/
https://blog.51cto.com/feirenraoyuan/5716392